package com.gvitz.transaction.database;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.gvitz.transaction.models.Card;
import com.gvitz.transaction.models.Client;
import com.gvitz.transaction.models.transaction;
import com.gvitz.transaction.utils.Config;






public class gvitzDB {
	
	private SQLiteDatabase db;
	private final Context context;
	private final DatabaseHelper dbhelper;
	
		

	public gvitzDB(Context c) {
		context = c;	
		dbhelper = new DatabaseHelper(context);

	}
	

	  public void DeleteTable() {
		  	db= dbhelper.getWritableDatabase();	
		    db.execSQL("DROP TABLE IF EXISTS " + Config.tabla_tarjetas );
		    dbhelper.onCreate(db);
		  


	  }
   
    /**
	 * abrir bd
	 */  
   
    public void open(){
		  db = dbhelper.getWritableDatabase();
		  db.beginTransaction();
    }
    
  
    /**
	 * cerrar bd
	 */
    
    public void close(){
    	 try {
    	       db.setTransactionSuccessful();
    	    } catch (Exception e) {
    	        e.printStackTrace();
    	    }finally{

    	    	db.endTransaction();  	       
    	        db.close();

    	    }
    	}

  
	public void AddTarjeta(Card Tarjeta){	
		
		db = dbhelper.getWritableDatabase();

		ContentValues cv=new ContentValues();
		  cv.put(Config.card_id, Tarjeta.getId_card());
		  cv.put(Config.card_nombre, Tarjeta.getNombre());
		  cv.put(Config.card_type, Tarjeta.getType());
		  cv.put(Config.card_number, Tarjeta.getCard_number());

		db.insert(Config.tabla_tarjetas, Config.card_id, cv);			
	}
	
	public void AddClient(Client cliente){	
		
		db = dbhelper.getWritableDatabase();

		ContentValues cv=new ContentValues();
		  cv.put(Config.cliente_id, cliente.getId_client());
		  cv.put(Config.cliente_nombre, cliente.getNombre());
		  cv.put(Config.cliente_latitud, cliente.getLatitud());
		  cv.put(Config.cliente_longitud,cliente.getLongitud());
		  cv.put(Config.cliente_direccion, cliente.getDireccion());

		db.insert(Config.tabla_clientes, Config.cliente_id, cv);			
	}
	
	public void UpdateClient(Client cliente){	
		
		 Client aux = GetCliente(cliente.getId_client());
		 
		 if(aux == null){
			 AddClient(cliente);
		 }
		 else{
		  	 UpClient(cliente);
		 }		
	}
	
	public void UpClient(Client cliente){	
		
		db = dbhelper.getWritableDatabase();

		ContentValues cv=new ContentValues();
		  cv.put(Config.cliente_id, cliente.getId_client());
		  cv.put(Config.cliente_nombre, cliente.getNombre());
		  cv.put(Config.cliente_latitud, cliente.getLatitud());
		  cv.put(Config.cliente_longitud,cliente.getLongitud());
		  cv.put(Config.cliente_direccion, cliente.getDireccion());

		  db.update(Config.tabla_clientes, cv, Config.cliente_id+"=?", new String []{String.valueOf(cliente.getId_client())});
		  db.close();		
	}
		
	public void AddTransaccion(transaction  trans){	 

		db = dbhelper.getWritableDatabase();
		
		ContentValues cv=new ContentValues();
		  cv.put(Config.trans_id, trans.getId());
		  cv.put(Config.trans_monto, trans.getMonto());
		  cv.put(Config.trans_id_cliente, trans.getId_cliente());
		  cv.put(Config.trans_nombre, trans.getNombre_cliente());
		  cv.put(Config.trans_fecha, trans.getFecha());
		  cv.put(Config.trans_id_tarjeta, trans.getId_tarjeta());

		db.insert(Config.tabla_transacciones, Config.trans_id, cv);			
	}
			 
	public Card GetTarjeta(int ID){
		
		 db = dbhelper.getReadableDatabase();		 
		 String[] params=new String[]{String.valueOf(ID)};
		 Cursor c=db.rawQuery("SELECT * FROM "+ Config.tabla_tarjetas +" WHERE "+ Config.card_id +"=?",params);
		 
		 if(c.getCount() == 0){
			 
			 db.close();
			 return null; 
		 }
		 
		 else{
			 c.moveToFirst();
			 Card tarjeta= new Card(c.getInt(c.getColumnIndex(Config.card_id)),
					 		c.getString(c.getColumnIndex(Config.card_nombre)),
					        c.getString(c.getColumnIndex(Config.card_type)),
				 			c.getString(c.getColumnIndex(Config.card_number)));
			 db.close();	
			 return tarjeta;
			 }
	  }
	
	public void deleteCard(int ID) 
	{
		db = dbhelper.getWritableDatabase();		 
	    db.delete(Config.tabla_tarjetas , Config.card_id+ "=" + ID, null);
	}
	
	public Client GetCliente(int ID){
		
		 db = dbhelper.getReadableDatabase();		 
		 String[] params=new String[]{String.valueOf(ID)};
		 Cursor c=db.rawQuery("SELECT * FROM "+ Config.tabla_clientes +" WHERE "+ Config.cliente_id +"=?",params);
		 
		 if(c.getCount() == 0){
			 
			 db.close();
			 return null; 
		 }
		 
		 else{
			 c.moveToFirst();
			 Client cliente= new Client(c.getInt(c.getColumnIndex(Config.cliente_id)),
					        c.getString(c.getColumnIndex(Config.cliente_nombre)),
				 			c.getString(c.getColumnIndex(Config.cliente_latitud)),
				 			c.getString(c.getColumnIndex(Config.cliente_longitud)),
				 			c.getString(c.getColumnIndex(Config.cliente_direccion)));
			 db.close();	
			 return cliente;
			 }
	  }
	
	public String GetNombreVendedor(int ID){
		
		 db = dbhelper.getReadableDatabase();		 
		 String[] params=new String[]{String.valueOf(ID)};
		 Cursor c=db.rawQuery("SELECT nombre FROM "+ Config.tabla_clientes +" WHERE "+ Config.cliente_id +"=?",params);
		 
		 if(c.getCount() == 0){
			 
			 db.close();
			 return null; 
		 }
		 
		 else{
			 c.moveToFirst();
             String nombre = c.getString(c.getColumnIndex(Config.cliente_nombre));
			 db.close();	
			 return nombre;
			 }
	  }
		
	public transaction GetTransaction(int ID){
		
		 db = dbhelper.getReadableDatabase();		 
		 String[] params=new String[]{String.valueOf(ID)};
		 Cursor c=db.rawQuery("SELECT * FROM "+ Config.tabla_transacciones +" WHERE "+ Config.trans_id +"=?",params);
		 
		 if(c.getCount() == 0){
			 
			 db.close();
			 return null; 
		 }
		 
		 else{
			 c.moveToFirst();
			 transaction trans= new transaction(c.getInt(c.getColumnIndex(Config.trans_id)),
					        c.getInt(c.getColumnIndex(Config.trans_monto)),
				 			c.getInt(c.getColumnIndex(Config.trans_id_cliente)),
				 			c.getString(c.getColumnIndex(Config.trans_nombre)),
				 			c.getString(c.getColumnIndex(Config.trans_fecha)),
				 			c.getInt(c.getColumnIndex(Config.trans_id_tarjeta)));
			 db.close();	
			 return trans;
			 }
	  }
			 
	public ArrayList<Card> GetTarjetas(){
		 ArrayList<Card> TarjetasList = new ArrayList<Card>();
	 
		 db = dbhelper.getReadableDatabase();	 
		 Cursor c = db.rawQuery("SELECT * FROM "+ Config.tabla_tarjetas , null);
		 

		 if(c.getCount() == 0){
			 
			 db.close();	
			 return null; 
		 }
		 
		 else{ 		 		 
		
			 c.moveToFirst();
			 int aux = c.getCount();		 
			 while (aux > 0){
				 Card tarjeta= new Card(c.getInt(c.getColumnIndex(Config.card_id)),
					 		c.getString(c.getColumnIndex(Config.card_nombre)),
					        c.getString(c.getColumnIndex(Config.card_type)),
				 			c.getString(c.getColumnIndex(Config.card_number)));
				 c.moveToNext();
				 aux = aux - 1;
				 TarjetasList.add(tarjeta);		  	 
			 				}
			 db.close();
			 	 
			 return TarjetasList ;
		 	}		 
	   }
		
	public ArrayList<Client> GetClients(){
		 ArrayList<Client> ClientList = new ArrayList<Client>();
		 
		 db = dbhelper.getReadableDatabase();
		 Cursor c = db.rawQuery("SELECT * FROM "+ Config.tabla_clientes , null);
		 
		
		 if(c.getCount() == 0){
			 
			 db.close();	
			 return null; 
		 }
		 
		 else{ 		 		 
		
			 c.moveToFirst();
			 int aux = c.getCount();		 
			 while (aux > 0){
				 Client cliente= new Client(c.getInt(c.getColumnIndex(Config.cliente_id)),
					        c.getString(c.getColumnIndex(Config.cliente_nombre)),
				 			c.getString(c.getColumnIndex(Config.cliente_latitud)),
				 			c.getString(c.getColumnIndex(Config.cliente_longitud)),
				 			c.getString(c.getColumnIndex(Config.cliente_direccion)));
				 c.moveToNext();
				 aux = aux - 1;
				 ClientList.add(cliente);		  	 
			 				}
			 db.close();
			 return ClientList ;
		 	}		 
	   }
		
	public ArrayList<transaction > GetTransacciones(){
		 ArrayList<transaction > Listtransactions  = new ArrayList<transaction >();
		 
		 db = dbhelper.getReadableDatabase();
		 Cursor c = db.rawQuery("SELECT * FROM "+ Config.tabla_transacciones +" ORDER BY fecha DESC" , null);
		 
		
		 if(c.getCount() == 0){
			 
			 db.close();	
			 return null; 
		 }
		 
		 else{ 		 		 
		
			 c.moveToFirst();
			 int aux = c.getCount();		 
			 while (aux > 0){
				 transaction trans= new transaction(c.getInt(c.getColumnIndex(Config.trans_id)),
					        c.getInt(c.getColumnIndex(Config.trans_monto)),
				 			c.getInt(c.getColumnIndex(Config.trans_id_cliente)),
				 			c.getString(c.getColumnIndex(Config.trans_nombre)),
				 			c.getString(c.getColumnIndex(Config.trans_fecha)),
				 			c.getInt(c.getColumnIndex(Config.trans_id_tarjeta)));
				 c.moveToNext();
				 aux = aux - 1;
				 Listtransactions.add(trans);		  	 
			 				}
			 db.close();
			 return Listtransactions  ;
		 	}		 
	   }
	
} 